﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace HoneyEngine.GameStates
{
    /// <summary>
    /// Written and designed by Julian Biermann
    /// 
    /// public abstract class GameState
    /// 
    /// Represents a blueprint for Gamestate Objects. All GameState objects should implement the Methods and members
    /// of this Class in order to be stored in the GameStateManager class.
    /// </summary>
    public abstract class GameState
    {
        #region Declaration

        /// <summary>
        /// Status if the State is initialized
        /// </summary>
        private bool m_IsInitialized = false;

        #endregion

        #region Constructor

        /// <summary>
        /// Constructor
        /// </summary>
        public GameState()
        {
        }

        #endregion

        #region Properties

        public bool IsInitialized
        {
            get { return this.m_IsInitialized; }
            set { this.m_IsInitialized = value; }
        }

        #endregion

        #region Methods

        /// <summary>
        /// Contains the initialize logic
        /// </summary>
        public abstract void Initialize();

        /// <summary>
        /// Put resource loading here
        /// </summary>
        public abstract void LoadContent();

        /// <summary>
        /// Put resource 
        /// </summary>
        public abstract void UnloadContent();

        /// <summary>
        /// 
        /// </summary>
        /// <param name="gameTime"></param>
        public abstract void Update(GameTime gameTime);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="gameTime"></param>
        public abstract void Draw(GameTime gameTime);

        #endregion
    }
}
